// 游戏状态类型定义
export interface GameState {
  currentScene: string;
  playerStats: PlayerStats;
  inventory: InventoryItem[];
  gameProgress: GameProgress;
  settings: GameSettings;
  currentSession?: GameSession; // 当前对局（如果在局内）
}

// 仓库状态 - 跨游戏局次保存的物品
export interface WarehouseState {
  items: InventoryItem[];
  capacity: number;
  upgrades: WarehouseUpgrade[];
  coins: number; // 搜币余额
}

// 装备槽位
export interface EquipmentSlots {
  head: InventoryItem | null;            // 头部装备
  body: InventoryItem | null;            // 身体装备
  primaryWeapon: InventoryItem | null;   // 主武器
  secondaryWeapon: InventoryItem | null; // 副武器
  knife: InventoryItem | null;           // 刀
  backpack: InventoryItem | null;        // 背包
  ammoPouch: InventoryItem | null;       // 弹挂
}

// 计算后的装备属性
export interface CalculatedStats {
  totalAttack: number;
  totalDefense: number;
  totalAccuracy: number;
  totalSpeed: number;
  inventoryCapacity: number;
  ammoCapacity: number;
}

// 玩家状态
export interface PlayerStats {
  name: string;
  level: number;
  health: number;
  maxHealth: number;
  energy: number;
  maxEnergy: number;
  experience: number;
  coins: number; // 当前游戏局的搜币
  equipment: EquipmentSlots; // 当前装备
  calculatedStats: CalculatedStats; // 计算后的总属性
}

// 物品等级枚举（从高到低）
export enum ItemRarity {
  LEGENDARY = 'legendary', // 红色 - 传说
  EPIC = 'epic',          // 金色 - 史诗
  RARE = 'rare',          // 紫色 - 稀有
  UNCOMMON = 'uncommon',   // 蓝色 - 优秀
  COMMON = 'common'        // 绿色 - 普通
}

// 装备类型枚举
export enum EquipmentType {
  HEAD = 'head',           // 头部装备
  BODY = 'body',           // 身体装备
  PRIMARY_WEAPON = 'primary_weapon',   // 主武器
  SECONDARY_WEAPON = 'secondary_weapon', // 副武器
  KNIFE = 'knife',         // 刀
  BACKPACK = 'backpack',   // 背包
  AMMO_POUCH = 'ammo_pouch' // 弹挂
}

// 装备属性
export interface EquipmentStats {
  attack?: number;        // 攻击力
  defense?: number;       // 防御力
  accuracy?: number;      // 精准度
  speed?: number;         // 速度
  capacity?: number;      // 容量（背包）
  ammoCapacity?: number;  // 弹药容量（弹挂）
  durability?: number;    // 耐久度
  range?: number;         // 射程
  fireRate?: number;      // 射速
}

// 物品配置（基础模板）
export interface ItemConfig {
  id: string;
  name: string;
  description: string;
  type: 'weapon' | 'armor' | 'consumable' | 'key' | 'misc' | 'equipment';
  rarity: ItemRarity;
  baseValue: number; // 基础价值（搜币）
  sellable: boolean; // 是否可出售
  stackable: boolean; // 是否可堆叠
  maxStack: number; // 最大堆叠数量
  level?: number; // 物品等级要求
  effects?: ItemEffect[]; // 物品效果
  equipmentType?: EquipmentType; // 装备类型
  equipmentStats?: EquipmentStats; // 装备属性
}

// 物品效果
export interface ItemEffect {
  type: 'heal' | 'damage' | 'buff' | 'debuff' | 'special';
  value: number;
  duration?: number; // 持续时间（毫秒）
  description: string;
}

// 实际物品实例（继承配置）
export interface InventoryItem extends ItemConfig {
  quantity: number;
  instanceId?: string; // 实例ID，用于区分同类物品
  enhancement?: number; // 强化等级
  durability?: number; // 耐久度
}

// 游戏进度
export interface GameProgress {
  currentChapter: number;
  completedQuests: string[];
  flags: Record<string, boolean>;
  visitedScenes: string[];
}

// 游戏设置
export interface GameSettings {
  textSpeed: number;
  autoSave: boolean;
  soundEnabled: boolean;
  language: 'zh-CN' | 'en';
}

// 场景选择
export interface SceneChoice {
  id: string;
  text: string;
  condition?: (gameState: GameState) => boolean;
  action: (gameState: GameState) => GameState;
}

// 游戏场景
export interface GameScene {
  id: string;
  title: string;
  description: string;
  choices: SceneChoice[];
  onEnter?: (gameState: GameState) => GameState;
  onExit?: (gameState: GameState) => GameState;
}

// 仓库升级
export interface WarehouseUpgrade {
  id: string;
  name: string;
  description: string;
  capacityIncrease: number;
  cost: number;
  unlocked: boolean;
}

// 存档数据 - 简化为单一存档
export interface SaveData {
  gameState: GameState;
  warehouse: WarehouseState;
  saveDate: string;
}

// 容器系统类型定义
export interface LootEntry {
  itemId: string;           // 物品ID
  dropRate: number;         // 掉落率 (0-100)
  minQuantity: number;      // 最小数量
  maxQuantity: number;      // 最大数量
  weight: number;           // 权重（用于计算相对概率）
}

export interface LootTable {
  id: string;
  name: string;
  entries: LootEntry[];     // 战利品条目
  guaranteedDrop?: boolean; // 是否保证掉落至少一个物品
  maxDrops?: number;        // 最大掉落数量
}

export interface ContainerType {
  id: string;
  name: string;
  description: string;
  searchTime: number;       // 搜索时间(秒)
  lootTableId: string;      // 使用的战利品表ID
  icon?: string;            // 图标
  rarity: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary'; // 稀有度
}

export interface Container {
  id: string;
  typeId: string;           // 容器类型ID
  name?: string;            // 自定义名称（可选）
  searched: boolean;        // 是否已搜索
  locked?: boolean;         // 是否锁定（需要钥匙）
  requiredKey?: string;     // 所需钥匙ID
}

// 地图系统类型定义
export interface Room {
  id: string;
  name: string;
  description: string;
  // 露天战利品系统
  hasLoot: boolean;
  lootTableId?: string;         // 使用战利品表ID而不是直接的物品列表
  lootTable?: string[];         // 向后兼容：直接的物品ID列表
  searched: boolean;
  // 容器系统
  containers?: Container[];     // 房间内的容器
  // 其他属性
  enemies: Enemy[];
  isExtractionPoint?: boolean;  // 是否为撤离点
  isZoneTransition?: boolean;   // 是否为区域传送点
  connectedZone?: string;       // 连接到的区域ID
}

export interface Floor {
  id: string;
  name: string;
  number: number;
  rooms: Room[];
}

export interface Building {
  id: string;
  name: string;
  description: string;
  floors: Floor[];
}

export interface Zone {
  id: string;
  name: string;
  description: string;
  buildings: Building[];
  color?: string; // 区域主题色
}

export interface GameMap {
  id: string;
  name: string;
  description: string;
  zones: Zone[];
  startingZone: string; // 默认开始区域
}

// 对局系统类型定义
export enum ActionType {
  MOVE = 'move',
  ZONE_TRAVEL = 'zone_travel',
  SEARCH = 'search',              // 搜索露天物品
  SEARCH_CONTAINER = 'search_container', // 搜索容器
  ATTACK = 'attack',
  HEAL = 'heal',
  REST = 'rest',
  EXTRACT = 'extract'
}

export interface Action {
  type: ActionType;
  timeCost: number;  // 行动消耗的时间(秒)
  description: string;
}

export interface Position {
  mapId: string;
  zoneId: string;
  buildingId: string;
  floorId: string;
  roomId: string;
}

export interface Enemy {
  id: string;
  name: string;
  health: number;
  maxHealth: number;
  attack: number;
  defense: number;
  accuracy: number;
  lootTable: string[];
  defeated: boolean;
}

export interface GameSession {
  id: string;
  startTime: Date;
  remainingTime: number;  // 剩余时间(秒)
  maxTime: number;  // 总时间(秒) - 默认1800秒(30分钟)
  currentPosition: Position;
  broughtItems: InventoryItem[];  // 带入局的装备
  foundItems: InventoryItem[];    // 局内找到的物品
  isActive: boolean;
  canExtract: boolean;  // 是否可以撤离
}

export enum SessionResult {
  SUCCESS = 'success',  // 成功撤离
  TIMEOUT = 'timeout',  // 时间耗尽
  KILLED = 'killed',    // 被击杀
  ABANDONED = 'abandoned' // 主动放弃
}
